(define (domain pick-and-place)
  (:requirements :strips)
  (:predicates
    (Conf ?q)
    (Block ?b)
    (Pose ?p)
    (Booth ?q)
    (Kin ?q ?p)
    (Motion ?q1 ?t ?q2)
    (AtPose ?p ?q)
    (AtConf ?q)
    (Holding ?b)
    (HandEmpty)
    (Observable ?p)
    (Latent ?p)
    (Initial)
  )
  (:action move
    :parameters (?q1 ?t ?q2)
    :precondition (and (Motion ?q1 ?t ?q2) ; (Initial) ; Add Initial as a precondition
                       (AtConf ?q1))
    :effect (and (AtConf ?q2)
                 (not (AtConf ?q1)) (not (Initial)))
  )
  (:action pick
    :parameters (?b ?p ?q)
    :precondition (and (Block ?b) (Kin ?q ?p)
                       (AtConf ?q) (Observable ?p) (AtPose ?b ?p) (HandEmpty))
    :effect (and (Holding ?b)
                 (not (AtPose ?b ?p)) (not (HandEmpty)) (not (Initial)))
  )
  (:action phone
    :parameters (?b ?p)
    :precondition (and (Block ?b) (Pose ?p))
    ; :parameters (?b ?p ?q)
    ; :precondition (and (Block ?b) (Pose ?p) (Booth ?q)
    ;                    (AtConf ?q))
    :effect (and (Observable ?p)
                 (not (Latent ?p)) (not (Initial)))
  )
)